package com.manner.groupon.service.store;

import com.baomidou.mybatisplus.extension.service.IService;
import com.manner.groupon.common.BaseResponse;
import com.manner.groupon.common.PageResult;
import com.manner.groupon.model.dto.search.StoreRequest;
import com.manner.groupon.model.dto.search.StoreSearch;
import com.manner.groupon.model.dto.shop.ChargeOffGrouponCouponRequest;
import com.manner.groupon.model.dto.store.StoreSaveDTO;
import com.manner.groupon.model.entity.Store;
import com.manner.groupon.model.vo.*;

import java.util.HashMap;
import java.util.List;

/**
 * @author manner
 * @description 针对表[tb_store(商家表)]的数据库操作Service
 * @createDate 2024-10-13 14:26:26
 */
public interface StoreService extends IService<Store> {

    /**
     * @param phone 登录后台的门店联系人手机账号
     * @return LinkmanLoadStoreListVo
     * @description: 根据手机号获取门店联系人名下的一个店铺信息
     * @author Manner
     * @date 2024/12/8 23:47
     */
    LinkmanLoadStoreListVo getLinkmanOneStore(String phone);

    /**
     * @param phone 登录后台的门店联系人手机账号
     * @return List<LinkmanLoadStoreListVo>
     * @description: 根据手机号获取门店联系人名下的所有店铺信息
     * @author Manner
     * @date 2024/12/8 22:09
     */
    List<LinkmanLoadStoreListVo> getLinkmanAllStore(String phone);

    /**
     * 商家核销团购优惠券
     *
     * @param requestArgs 核销所需参数类
     * @return BaseResponse<Boolean>
     * @author Manner
     * @date 2024/10/13 17:00
     */
    BaseResponse<String> chargeOffGrouponCoupons(ChargeOffGrouponCouponRequest requestArgs);

    /**
     * 查询门店数据
     *
     * @param storeSearch 分页参数
     * @return
     */
    BaseResponse<PageResult<StoreVo>> search(StoreSearch storeSearch);

    /**
     * 根据门店编号获取数据
     *
     * @param no 门店编号
     * @return
     */
    BaseResponse<StoreVo> queryByNo(String no);

    /**
     * 条件搜索
     *
     * @param storeRequest 搜索条件
     * @return
     */
    BaseResponse<PageResult<AdminStoreVO>> query_search(StoreRequest storeRequest);

    /**
     * 保存门店信息
     *
     * @param storeSaveDTO 门店数据
     * @return
     */
    BaseResponse<String> insert(StoreSaveDTO storeSaveDTO);

    /**
     * 根据手机号查询门店
     *
     * @param phone 手机号
     * @return
     */
    BaseResponse<List<Store>> query_phone(String phone);

    /**
     * 根据编号查询门店数据
     *
     * @param id
     * @return
     */
    BaseResponse<AdminStoreVO> query_id(Long id);

    /**
     * 修改门店数据
     *
     * @param store
     * @return
     */
    BaseResponse<String> updateByNo(Store store);

    /**
     * 修改门店状态
     *
     * @param id     门店ID
     * @param status 新状态
     * @return
     */
    BaseResponse<String> updateStatus(Long id, Integer status);

    /**
     * @param storeNo 店铺编号
     * @return BaseResponse<StoreHomeDataAssayVO>
     * @description: 商家后台主页数据展示分析
     * @author Manner
     * @date 2024/12/9 0:51
     */
    StoreHomeDataAssayVO getStoreHomeDataAssay(String storeNo);

    /**
     * @param storeNo
     * @return StoreBusinessDataSummaryAssayVO
     * @description: 店铺门店数据汇总分析
     * @author Manner
     * @date 2024/12/10 17:46
     */
    StoreIncomeDataSummaryAssayVO loadStoreBusinessDataSummaryAssay(String storeNo);

    /**
     * @param storeNo 店铺编号
     * @return BaseResponse<HashMap < List < Long>>>
     * @description: 获取店铺这个星期每天的订单数, 收益额, 退款额数据
     * @author Manner
     * @date 2024/12/10 22:31
     */
    HashMap<String, List<Long>> loadWeekEveryDayInformation(String storeNo);

    /**
     * @param storeNo 店铺编号
     * @return StoreWeekDataAssayVO
     * @description: 获取指定店铺在当前这个月中每个星期的订单数, 收益额, 退款额数据 ,以及每周的环比数据
     * @author Manner
     * @date 2024/12/11 4:14
     */
    StoreWeekDataAssayVO loadMonthEveryWeekInformation(String storeNo);

    /**
     * @param storeNo 店铺编号
     * @return HashMap<List < Long>>
     * @description: 获取指定店铺在当前这个季度中每个月的订单数, 收益额, 退款额数据 ,以及每周的环比数据
     * @author Manner
     * @date 2024/12/11 8:39
     */
    HashMap<String, List<String>> loadQuarterEveryMonthInformation(String storeNo);
}
